import { performScriptForEval } from "../sandbox/performScript.js";
// import { SnapShotSandbox } from "./snapShotSandbox.js";
import { ProxySandbox } from './proxySandbox.js';

// 检测子应用是否有对应的生命周期
const icCheckLifeCycle = (lifecycle) =>
  lifecycle && lifecycle.bootstrap && lifecycle.mount && lifecycle.unmount;

// 子应用生命周期处理，环境变量设置
export const sandBox = (app, script) => {
  // const proxy = new SnapShotSandbox(); // 快照沙箱
  const proxy = new ProxySandbox(); // 代理沙箱
  if(!app.proxy){
    app.proxy = proxy;
  }
  // 1. 设置环境变量
  window.__MICRO_WEB__ = true; // 微前端的环境

  // 那么如果说我们现在要设计一个沙箱的环境，那么呢我们在运行整体js的时候我们就需要将这个沙箱的环境给设置上

  // 2. 运行js文件
  const lifecycle = performScriptForEval(script, app.name, app.proxy.proxy); // app.proxy.proxy 代理的window对象

  // console.log("lifecycle", lifecycle);
  // 生命周期，挂载到app上
  if (icCheckLifeCycle(lifecycle)) {
    app.bootstrap = lifecycle.bootstrap;
    app.mount = lifecycle.mount;
    app.unmount = lifecycle.unmount; // 将三个生命周期挂载到我们的app上
  }
};
